package negocio;

public class Estadistica {
    private double[] valores;
    private int longitud;
   
    public Estadistica(double[] values){
        try{
             if (values.length>0){
                valores = values.clone();
                longitud = values.length;
            }
        }
        catch (java.lang.NullPointerException exc){
            
        }        
    }
    
    public void setValues(double[] values){        
        try{
            if (values.length>0){
                valores = values.clone();
                longitud = values.length;
            }
        }
        catch (java.lang.NullPointerException exc){
            
        }
    }
    
    public double[] getvalues(){
        return valores.clone();        
    }
    
    //me sirve
    public double getMedia(){        
        try{
            double suma=0;
            for (int i=0; i<valores.length; i++) {
               suma += valores[i];
            }
            return (suma/valores.length);
        }
        catch (java.lang.NullPointerException exc){
            return 0.0;
        }
    }

    public double getMediana(){
         try{
            if(longitud%2 == 0){
                double x1 = valores[longitud/2];
                double x2 = valores[(longitud-2)/2];
                return ((x1+x2)/2);
            }
            else{
                double x = valores[(longitud-1)/2];
                return x;
            }
        }
        catch (java.lang.NullPointerException exc){
           return 0.0;
        }
    }

    //me sirve
    public double getVarianza(){
        try{
            double Xm = getMedia();
            double suma = 0;
            for (int i=0; i<valores.length; i++) {
                double Xi = valores[i];
                suma += Math.pow((Xi-Xm), 2);
            }
            return (suma/valores.length);
        }
        catch (java.lang.NullPointerException exc){
            return 0.0;
        }
    }

    //me puede servir
    public double getDesvTipica(){
        return (Math.sqrt(getVarianza()));
    }

    //puede ser util..
    public String getModa(){


    try{
        //tomo la longitud del arreglo, me va a servir pa todos los arreglos
        int n = valores.length;
        //hago un clon de los valores y los guardo en datos
        double[] datos = valores.clone();
        //hago un vector pa contar la fracuencia de cada dato
        int[] frec = new int[n];

        //el arreglo datos y frec, me serviran como una tabla pa anotar
        //los valores en datos y su respectiva frecuencia en frec

        //verifico cada elemento de valores, si encuentro uno igual en datos aunmento su frecuencia y
        //qiebro el bucle pa seguir con el siguiente elemento, de modo q voy a tener una tabla de frecuencias
        //cada dato tendra su respectiva frecuencia en le arreglo frec, si es uno repetido tendra frec 0
        for (int i=0; i<n; i++) {
           double val = valores[i];
            for (int j=0; j<n; j++) {
                if(val == datos[j]){
                    frec[j]++;
                    break;
                }
            }
        }

        //voy a buscar la moda, sera el qe tenga la frec maxima
        int maxFrec = 0;
        double moda = 0;
        //comparo cada valor del arreglo frec con el maxFrec, la moda sera el respectivo del arreglo datos
        for (int i=0; i<n; i++) {
            if(frec[i]>maxFrec){
                maxFrec = frec[i];
                moda = datos[i];
            }
        }

        //si hay dos datos con la misma frecuencia, no lo sabre hasta verificarlo en el bucle siguiente
        //si encuentro 2 veces la maxFrec en el arrglo frec el cont valdra 1
        int cont=0;
        for (int i=0; i<n; i++) {
            if(maxFrec == frec[i])
                cont++;
        }

        //si se ha repetido la moda return 0, sino retrun la moda
        if(cont>1)
            return " ";
        else
            return String.valueOf(moda);
    }
    catch (java.lang.NullPointerException exc){
           return "";
    }
        
    }
    

}
